package cn.wp.ewallet.wallet.service.impl;

import cn.hutool.core.date.DateUtil;
import cn.wp.common.core.model.WpPage;
import cn.wp.common.core.util.BeanUtil;
import cn.wp.common.core.util.BeanUtil.Processor;
import cn.wp.ewallet.wallet.dao.ReqOrderInfoDao;
import cn.wp.ewallet.wallet.extension.constant.EwalletWalletConstant;
import cn.wp.ewallet.wallet.model.dto.ExchangeMoneyInfoDto;
import cn.wp.ewallet.wallet.model.dto.MentionMoneyInfoDto;
import cn.wp.ewallet.wallet.model.dto.ReqOrderInfoDto;
import cn.wp.ewallet.wallet.model.entity.ReqOrderInfoDo;
import cn.wp.ewallet.wallet.model.entity.ReqOrderInfoDoo;
import cn.wp.ewallet.wallet.service.ExchangeMoneyInfoService;
import cn.wp.ewallet.wallet.service.MentionMoneyInfoService;
import cn.wp.ewallet.wallet.service.ReqOrderInfoService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;


/**
 * 申请单-业务逻辑层实现
 * Created by zhangyongli on 2020/01/09
 */
@Service
public class ReqOrderInfoServiceImpl implements ReqOrderInfoService {

    @Autowired
    private ReqOrderInfoDao reqOrderInfoDao;

    @Autowired
    private ExchangeMoneyInfoService exchangeMoneyInfoService;

    @Autowired
    private MentionMoneyInfoService mentionMoneyInfoService;

    @Override
    public WpPage<ReqOrderInfoDto> getAllReqOrder(WpPage page) {
        WpPage<ReqOrderInfoDoo> wpPage = reqOrderInfoDao.selectReqOrderByCondition(null, page);
       return wpPage.doConvertDto(ReqOrderInfoDto.class, new Processor<ReqOrderInfoDoo,ReqOrderInfoDto>() {
           @Override
           public void convert(ReqOrderInfoDoo source, ReqOrderInfoDto target) {
               target.setCreateDate(DateUtil.formatDate(source.getCreateDate()));
           }
       });
    }

    @Override
    public WpPage<ReqOrderInfoDto> getPendingReqOrder(WpPage page) {
        WpPage<ReqOrderInfoDoo> wpPage = reqOrderInfoDao.selectReqOrderByCondition(EwalletWalletConstant.REQ_ORDER_STATUS_PENDING, page);
        return wpPage.doConvertDto( ReqOrderInfoDto.class);
    }

    @Override
    public ExchangeMoneyInfoDto getExchangeMoneyReqOrderById(String orderId) {
        return exchangeMoneyInfoService.getExchangeMoneyReqOrderById(orderId);
    }

    @Override
    public MentionMoneyInfoDto getMentionMoneyReqOrderById(String orderId) {
        return mentionMoneyInfoService.getMentionMoneyReqOrderById(orderId);
    }

    @Override
    public WpPage<ExchangeMoneyInfoDto> getExchangeMoneyReqOrderByaddress(WpPage page) {
        return exchangeMoneyInfoService.getExchangeMoneyReqOrderByaddress(page);
    }

    @Override
    public WpPage<MentionMoneyInfoDto> getMentionMoneyReqOrderByAddress(WpPage page) {
        return mentionMoneyInfoService.getMentionMoneyReqOrderByAddress(page);
    }

    @Override
    public WpPage<MentionMoneyInfoDto> getMentionMoneyReqOrderByMoneyType(String startTime, String endTime, String moneyType, WpPage page) {
        return mentionMoneyInfoService.getMentionMoneyReqOrderByMoneyType(startTime, endTime, moneyType, page);
    }

    /**
     * 该接口查询 申请订单 的详细信息 (部分条件和 全量查询)
     * @param startTime
     * @param endTime
     * @param reqType
     * @param wpPage
     * @return
     */
    @Override
    public WpPage<ReqOrderInfoDto> getReqOrderInfoDtosByParams(String startTime, String endTime, String reqType, WpPage wpPage) {
        WpPage<ReqOrderInfoDoo> page= reqOrderInfoDao.getReqOrderInfosByParams(startTime,endTime,reqType,wpPage);

         return page.doConvertDto(ReqOrderInfoDto.class,new BeanUtil.Processor<ReqOrderInfoDoo,ReqOrderInfoDto>(){
            @Override
            public void convert(ReqOrderInfoDoo source, ReqOrderInfoDto target) {
                target.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(source.getCreateDate()) );
            }
         });
    }
}